# 编写文章正文内容
# 第二个是 ContentNode，它根据文章的主题和标题，生成文章的正文内容：

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

from Article_image_ai_agent.deepseek import get_deepseek
from Article_image_ai_agent.prompt import SYSTEM_PROMPT, CONTENT_PROMPT
from Article_image_ai_agent.state import ArticleState


def content_node(state: ArticleState) -> ArticleState:
    """
    文章正文内容节点
    :param state: 当前文章状态
    :return: 处理后的文章状态
    """

    # 从当前状态中获取所需信息
    if not state["topic"]:
        raise ValueError("未指定文章主题！")
    if not state["title"]:
        raise ValueError("文章标题缺失！")

    topic = state["topic"]
    title = state["title"]

    # 构造prompt
    prompt = ChatPromptTemplate.from_messages([
        ("system", SYSTEM_PROMPT),
        ("user", CONTENT_PROMPT)
    ])

    # 获取DeepSeek客户端
    deepseek = get_deepseek()

    # 构造Chain
    chain = prompt | deepseek | StrOutputParser()

    # 调用Chain,获取结果
    content = chain.invoke({"topic": topic, "title": title})

    # 更新状态
    state["content"] = content
    print(f"文章正文生成完成：共 {len(content)} 字")

    # 返回处理后的状态
    return state